CodeCommit/CodePipeline/CodeBuildで自動awspecしてくれる環境を作ってみました
はじめに
こんにちは植木和樹@上越妙高オフィスです。
みなさん awspec はご存知でしょうか?awspecはAWS環境のVPC/EC2/セキュリティグループ/ルートテーブルが「あるべき設定」になっているかをテストしてくれるツールです。
k1LoW/awspec: RSpec tests for your AWS resources.
本番環境でAWSを使っていくと、どんどん環境が大規模になり複雑になります。とある作業が意図しない変更をしてしまっていないか不安になることがありませんか?そんな時に「あるべき設定」になっているか自動でチェックしてくれる仕組みがあると便利ですよね。
今回はCodeCommitに変更をpushすると、CodeBuildがawspecを使って自動的に環境をテストしてくれる仕組みを作ってみました。
CodeCommitとCodeBuildはCodePipelineで繋げます。CodeCommitのmasterブランチに変更があると、CodePipelineがソースを固めてS3にアップし、CodeBuildはS3からファイルをダウンロード・展開してからawspecを起動する、という仕掛けです。
CodeCommit/CodePipeline/CodeBuild環境の構築
環境構築するの大変ですよね?私は大変でした。CloudFormationで環境を一発作成できるテンプレートを用意したのでご利用ください。
awspecによるテストの準備
CloudFormationで環境が構築できたら、今度はawspecを準備して実際にCodeCommitにpushしてみましょう。
雛形をgithubに用意したので参考にしてください。
classmethod-aws/awspec: Build CodeCommit/CodePipeline/CodeBuild environment for awspec
githubからリポジトリをcloneする
まずはgithubからリポジトリをcloneします。cloneしたらclone元のリポジトリ設定は不要なので消しておきましょう。
git clone https://github.com/classmethod-aws/awspec.git git remote remove origin
awspec generateでspecファイルの雛形を作成する
awspecはgenerateというコマンドで雛形を作ってくれます。素晴らしい。
今回は90_setup.shという名前で、既存のAWS環境からマルっと雛形を作るシェルスクリプトを用意しました。雛形ができたら00run.sh(中身はbundle exec rake specを実行してる)スクリプトでテストが成功することを確認しましょう。
cd awspec/awspec export AWS_DEFAULT_PROFILE=default ./90_setup.sh ./00run.sh
なお"default"セキュリティグループはAWSアカウント内で名前が重複しているとテストに失敗します。セキュリティグループ名でなくセキュリティグループ"ID"指定に修正すればOKです。
describe security_group('default') do ↓ describe security_group('sg-XXXXXXXX') do
specファイルをcommitする
テストが成功したら、generateされたspecファイルをcommitしましょう。
git add --all git commit --all -m'Do awspec generate.'
CodeCommitにpushする
CodeCommitを使うのが初めての方は、AWSのドキュメントの通り認証ヘルパーを設定しておいてください。
AWS CLI 認証情報ヘルパーを使用して Windows 上で AWS CodeCommit リポジトリへの HTTPS 接続の設定手順 - AWS CodeCommit
認証ヘルパーの設定ができたら、CodeCommitのリポジトリを追加してpushします。CodeCommitのパスは作成したCloudFormationスタックの「出力」タブに出力されています。
git remote add codecommit https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/my-repo git push codecommit --all
pushするとCodePipelineが動きはじめテストが開始されます。
テスト結果を確認する
CodePipelineのコンソールを開きます。 AWS CodePipeline Management Console
Source, Buildフェーズともに成功になっていれば成功です!
もしテストが失敗している場合にはCodeBuildコンソールの「ビルド履歴」を確認して原因を確認してください。 AWS CodeBuild Management
環境変更後の再テスト
今後AWS環境を変更した時にはCodeCommitのmasterブランチに対して git push してください。自動的にawspecによるテストが実行されます。
もしテストが失敗した場合には awspec/spec ディレクトリ以下のspecファイルを修正しましょう。(※環境を変更する前にテストを修正すべきですね :))
まとめ
CodeCommit/CodePipeline/CodeBuildを使ったawspecの自動実行についてご紹介しました。
CodeBuildではソースを展開したディレクトリにある buildspec.yml に記述された処理を実行します。 今回はawspecを実行していますが、応用次第ではCodeCommitへのpushをトリガーに様々な処理を組み込めるかと思います。ぜひ色々と試してみてください!